//设置toastr选项
toastr.options = {
    "closeButton": true,
    "debug": false,
    "progressBar": true,
    "preventDuplicates": false,
    "positionClass": "toast-top-right",
    "onclick": null,
    "showDuration": "400",
    "hideDuration": "1000",
    "timeOut": "1000",
    "extendedTimeOut": "1000",
    "showEasing": "swing",
    "hideEasing": "linear",
    "showMethod": "fadeIn",
    "hideMethod": "fadeOut"
}
window.utils = {
    /**
     *
     * @param data json响应数据
     * @param loadtag 载入标签
     */
    showToastr: (data, loadtag = '') => {
        switch (data.status) {
            case 'success':
                toastr.success(data.message, data.title);
                break;
            case 'error':
                toastr.error(data.message, data.title);
                break;
            case 'info':
                toastr.info(data.message, data.title);
                break;
            default:
                toastr.warning(data.message, data.title);
                break;
        }
        if (data.status == 'success') {
            switch (loadtag) {
                case 'reload':
                    utils.reload(data.jumpTime);
                    break;
                case 'goback':
                    utils.goback(data.jumpTime);
                    break;
                case 'go':
                    if (data.url) {
                        utils.redirect(data.url, data.jumpTime);
                    }
                    break;
                default:
                    break;
            }
        }
    },
    bootstraptableOptions: {
        url:'',//请求地址
        method: 'get',//请求方式（*）
        toolbar: '#toolbar',//工具按钮用哪个容器
        striped: true,//是否显示行间隔色
        cache: false,//是否使用缓存，默认为true，所以一般情况下需要设置一下这个属性（*）
        pagination: true,//是否显示分页（*）
        sortable: false,//是否启用排序
        sortOrder: "asc",//排序方式
        sidePagination: "server",//分页方式：client客户端分页，server服务端分页（*）
        pageNumber: 1,//初始化加载第一页，默认第一页
        pageSize: 10,//每页的记录行数（*）
        pageList: [10, 25, 50, 100],//可供选择的每页的行数（*）
        paginationFirstText: "首页",
        paginationPreText: "上一页",//分页条中上一页按钮的图标或文字
        paginationNextText: "下一页",//分页条中下一页按钮的图标或文字
        paginationLastText: "尾页",
        queryParamsType : "",//limit:获取页面偏移量offset和页面大小pageSize,"":获取当前页数pageNumber和页面大小pageSize
        responseHandler: function (response) {
            return {
                rows:response.data,
                total:response.total,
            };
        },
        search: false,//是否显示表格搜索，此搜索是客户端搜索，不会进服务端，所以，个人感觉意义不大
        contentType: "application/x-www-form-urlencoded",
        strictSearch: true,
        showColumns: true,//是否显示所有的列
        showRefresh: true,//是否显示刷新按钮
        minimumCountColumns: 2,//最少允许的列数
        clickToSelect: true,//是否启用点击选中行
        uniqueId: "no",//每一行的唯一标识，一般为主键列
        showToggle: true,//是否显示详细视图和列表视图的切换按钮
        cardView: false,//是否显示详细视图
        detailView: false,//是否显示父子表
        icons: {
            refresh: 'fa fa-refresh',
            detailOpen: 'fa fa-tasks',
            toggle: 'fa fa-exchange',
        },
        onLoadSuccess: function(res){  //加载成功时执行
            layer.msg("加载成功", {time : 1000});
        },
        onLoadError: function(){  //加载失败时执行
            layer.msg("加载数据失败");
        },
    },
    /**
     * 确认框
     * @param url
     * @param data
     * @param title
     * @param content
     */
    confirm: (url, data = {}, callback, title = '你确定删除么？', content = '删除后将无法恢复') => {
        layer.confirm(content, {icon: 3, title: title}, (index) => {
            axios.post(url, data).then((response) => {
                if (callback) {
                    callback.call(null, response, data);
                } else {
                    utils.showToastr(response.data, 'go');
                }
            }).catch((error) => {
                if (error.response) {
                    utils.showToastr({
                        'status': 'error',
                        'title': error.response.status,
                        'message': error.response.statusText
                    });
                } else if (error.request) {
                    console.log(error.request);
                } else {
                    utils.showToastr({'status': 'error', 'title': '请求错误', 'message': error});
                }
            });

            layer.close(index);
        });
    },
    /**
     * 页面跳转，重定向
     * @param url 跳转链接
     * @param times 等待时间
     */
    redirect: (url, times = 1000) => {
        if (times > 0) {
            setTimeout(() => {
                window.location.href = url;
            }, times);
        } else {
            window.location.href = url;
        }
    },
    /**
     * 页面刷新
     * @param times 等待时间
     */
    reload: (times = 1000) => {
        if (times) {
            setTimeout(() => {
                window.location.reload();
            }, times);
        } else {
            window.location.reload();
        }
    },
    /**
     * 页面返回
     * @param times 等待时间
     */
    goback: (times = 1000) => {
        if (times) {
            setTimeout(() => {
                window.history.back(-1);
            }, times);
        } else {
            window.history.back(-1);
        }
    },
    /**
     * 异步post请求
     * @param posturl
     * @param data
     * @param callback
     */
    ajaxPost: (posturl, data = {}, callback) => {
        axios.post(posturl, data)
            .then((response) => {
                if (callback) {
                    callback.call(null, response, data);
                } else {
                    utils.showToastr(response.data, 'go');
                }
            })
            .catch(error => {
                if (error.response) {
                    utils.showToastr({
                        'status': 'error',
                        'title': error.response.status,
                        'message': error.response.statusText
                    });
                } else if (error.request) {
                    console.log(error.request);
                } else {
                    utils.showToastr({'status': 'error', 'title': '请求错误', 'message': error});
                }
            });
    },
    /**
     * 异步get请求
     * @param posturl
     * @param data
     * @param callback
     */
    ajaxGet: (geturl, data = {}, callback) => {
        axios.get(geturl, {
            params: data
        }).then((response) => {
            if (callback) {
                callback.call(null, response, data);
            } else {
                utils.showToastr(response.data, 'go');
            }
        }).catch(error => {
            if (error.response) {
                utils.showToastr({
                    'status': 'error',
                    'title': error.response.status,
                    'message': error.response.statusText
                });
            } else if (error.request) {
                console.log(error.request);
            } else {
                utils.showToastr({'status': 'error', 'title': '请求错误', 'message': error});
            }
        });
    },
    /**
     * 异步提交表单
     * @param posturl
     * @param data
     */
    ajaxSubmitForm: (form, posturl, otherData = {}, callback) => {
        let params = $(form).serializeArray();
        let formData = {};
        for (x in params) {
            formData[params[x].name] = params[x].value;
        }
        let postdata = _.merge(formData, otherData);
        posturl = posturl ? posturl : $(form).attr('action');
        if (!posturl){
            console.log('表单提交路径为空');
        }
        axios.post(posturl, postdata).then((response) => {
            if (callback) {
                callback.call(null, response, postdata);
            } else {
                utils.showToastr(response.data, 'go');
            }
        }).catch((error) => {
            if (error.response) {
                utils.showToastr({
                    'status': 'error',
                    'title': error.response.status,
                    'message': error.response.statusText
                });
            } else if (error.request) {
                console.log(error.request);
            } else {
                utils.showToastr({'status': 'error', 'title': '请求错误', 'message': error});
            }
        });
    },
    /**
     * 上传组件
     * @param fileType
     * @param options
     * @returns {*}
     */
    webUploader: (fileType, options = {}) => {
        let accept = {};
        if (fileType == 'image'){
            accept = {
                title: '图片文件',
                extensions: 'gif,jpg,jpeg,bmp,png',
                mimeTypes: 'image/gif,image/jpg,image/jpeg,image/bmp,image/png'
            };
        }else if (fileType == 'voice'){
            accept = {
                title: '语音文件',
                extensions: 'mp3,wma,wav,amr',
                mimeTypes: 'audio/*'
            };
        }else if(fileType == 'video'){
            accept = {
                title: '视频文件',
                extensions: 'mp4,flv,mkv,wmv',
                mimeTypes:"video/mp4",
            };
        } else{
            consule.log('请选择正确的上传类型');
            return false;
        }
        let uploadUrl = options.uploadUrl || '/Admin/SysFile/webUpload';
        let uploadBtnName = options.uploadBtnName || '#btn-upload';
        let uploadBtnText = options.uploadBtnText || '选择图片';
        let uploader = WebUploader.create({
            // 选完文件后，是否自动上传。
            auto: true,
            // swf文件路径
            swf: '/vendor/webuploader/Uploader.swf',

            // 文件接收服务端。
            server: uploadUrl,

            // 选择文件的按钮。可选。
            pick: {
                id: uploadBtnName,
                name:"file",  //这个地方 name 没什么用，虽然打开调试器，input的名字确实改过来了。但是提交到后台取不到文件。如果想自定义file的name属性，还是要和fileVal 配合使用。
                label: uploadBtnText,
                multiple:false            //默认为true，true表示可以多选文件，HTML5的属性
            },
            // 只允许选择图片文件。
            accept: accept,
            //设置文件上传域的name
            fileVal:'file',
            duplicate:true,//是否可重复选择同一文件
            resize: false,
            compress: null,//图片不压缩
            chunked: true,//分片处理
            fileSingleSizeLimit:1024 * 1024 * 50,//验证单个文件大小是否超出限制,50M
            chunkSize: 1 * 1000 * 1000, //每片1M
            chunkRetry:2,//如果失败，重试2次
            threads:1,//上传并发数。允许同时最大上传进程数。
            runtimeOrder: 'flash,html5',
            // 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候，把图片打开。
            disableGlobalDnd: true
        });
        uploader.on('uploadBeforeSend', function(block, data, headers){
            data.fileType = fileType;
            //头部成熟
            let token = document.head.querySelector('meta[name="csrf-token"]');
            headers['X-CSRF-TOKEN'] = token.content;
        });
        // 文件上传过程中创建进度条实时显示。
        uploader.on('uploadProgress', function( file, percentage ) {
            loadBox = layer.load(1, {
                shade: [0.3,'#fff'] //0.1透明度的白色背景
            });
        });
        // 完成上传完了，成功或者失败，先删除进度条。
        uploader.on( 'uploadComplete', function( file ) {
            layer.close(loadBox);
        });
        return uploader;
    },
    /**
     * js对象转换为url参数字符串
     * @param param
     * @param key
     * @param encode
     * @returns {string}
     */
    urlEncode: (param = {}, key = '', encode = '') => {
        if(param==null) return '';
        let paramStr = '';
        let t = typeof (param);
        if (t == 'string' || t == 'number' || t == 'boolean') {
            paramStr += '&' + key + '=' + ((encode==null||encode) ? encodeURIComponent(param) : param);
        } else {
            for (var i in param) {
                let k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '.' + i);
                paramStr += utils.urlEncode(param[i], k, encode);
            }
        }
        return paramStr;
    },
}
